]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st: Canonicalize URLs in stylesheets
authorFlorian Müllner <fmuellner@gnome.org>
Wed, 17 Oct 2012 20:28:01 +0000 (22:28 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 17 Oct 2012 21:25:56 +0000 (23:25 +0200)
Make _st_theme_resolve_url() a bit smarter by canonicalizing the
resulting path (e.g. resolving references to /./ and /../).

https://bugzilla.gnome.org/show_bug.cgi?id=679268

src/st/st-theme.c

index f3b1c13b7fb0a2055363a5fa0e9fe1864df136a4..77076c09e5635cfcde7ea583a5e4c89b6fb3b249 100644 (file)
@@ -1018,6 +1018,7 @@ _st_theme_resolve_url (StTheme      *theme,
   const char *base_filename = NULL;
   char *dirname;
   char *filename;
+  char *canonicalized_path;
 
   /* Handle absolute file:/ URLs */
   if (g_str_has_prefix (url, "file:") ||
@@ -1050,7 +1051,19 @@ _st_theme_resolve_url (StTheme      *theme,
   /* Assume anything else is a relative URL, and "resolve" it
    */
   if (url[0] == '/')
-    return g_strdup (url);
+    {
+      canonicalized_path = realpath (url, NULL);
+      if (g_mem_is_system_malloc ())
+        {
+          filename = canonicalized_path;
+        }
+      else
+        {
+          filename = g_strdup (canonicalized_path);
+          free (canonicalized_path);
+        }
+      return filename;
+    }
 
   base_filename = g_hash_table_lookup (theme->filenames_by_stylesheet, base_stylesheet);
 
@@ -1062,7 +1075,19 @@ _st_theme_resolve_url (StTheme      *theme,
 
   dirname = g_path_get_dirname (base_filename);
   filename = g_build_filename (dirname, url, NULL);
+  canonicalized_path = realpath (filename, NULL);
   g_free (dirname);
+  g_free (filename);
+
+  if (g_mem_is_system_malloc ())
+    {
+      filename = canonicalized_path;
+    }
+  else
+    {
+      filename = g_strdup (canonicalized_path);
+      free (canonicalized_path);
+    }
 
   return filename;
 }